如果是basic can 里面会有这些需要使用的寄存器
#define startadd 0xf700 //SJA1000的首地址,其地址由CS片选输入端决定
#define CR 0x00 //控制寄存器,里面主要控制中断使能位,和复位,can初始化必须在 复位模式下
#define CMR 0x01 //命令寄存器,发送请求,清除数据溢出
#define SR 0x02 //状态寄存器是只读的,一般用来读取状态值
#define IR 0x03 //中断寄存器也是只读的,顾名思义就是读取什么触发的中断
#define ACR 0x04 //验收代码
#define AMR 0x05 //验收屏蔽
#define BTR0 0x06 //总线时序寄存器0,设置波特率
#define BTR1 0x07 //总线时序寄存器1 ,设置波特率
#define OCR 0x08 //输出控制寄存器 ,设置输出模式
#define TEST 0x09
///////////////////////////
/////yoyodvd///////////
/*发送*/
#define TXID0 0x0A // 标准ID是11位,这是高8位ID
#define TXID1 0x0B // 000RTR, DLC0-3 ,这里高3位是11位ID的低3位,然后就是帧格式,再就是数据长度
#define TXDATA0 0x0C
#define TXDATA1 0x0D
#define TXDATA2 0x0E
#define TXDATA3 0x0F
#define TXDATA4 0x10
#define TXDATA5 0x11
#define TXDATA6 0x12
#define TXDATA7 0x13 这8个就是8字节数据
/////////////////////
下面发送和接受几乎是一样的,唯一不同就是寻址不一样,如果采用的是pelican 接受和发送的寻址是一摸一样的 配置其实也很简单,看下SJA1000的datasheet就懂了,有什么不懂再问我
/*接收*/
#define RXID0 0x14
#define RXID1 0x15
#define RXDATA0 0x16
#define RXDATA1 0x17
#define RXDATA2 0x18
#define RXDATA3 0x19
#define RXDATA4 0x1A
#define RXDATA5 0x1B
#define RXDATA6 0x1C
#define RXDATA7 0x1D
#define CDR 0X1F // 时钟分频
SJA1000里面,basiccan 上有说,验收ACR和AMR,校验高8位ID,如果你是用广播方式的话,AMR = 0xff,ACR 随便都可以((ID10-3)== ACR(7-0))|(AMR( 7 - 0)) = 1111,1111,所有的ID都可以接收 如果要接收指定ID,你根据这个公式,计算下就可以了